﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using SAP.Middleware.Connector;
using CM.DL.DALC.NC03;

namespace DECOR.DL.DALC.NC03
{
    public class ReclamoDALC : IReclamoDALC
    {
        const string nl = "\r\n";
        private string _connId = string.Empty;

        public static ReclamoDALC Instance(string pConnId)
        {
            if (_instance == null)
            {
                lock (typeof(ReclamoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ReclamoDALC(pConnId);
                    }
                }
            }
            return _instance;
        }

        private ReclamoDALC(string pConnId) { this._connId = pConnId; }
        private ReclamoDALC() { }

        private static volatile ReclamoDALC _instance = null;

        #region IReclamoDALC Members

        public DECOR.BL.BE.CombosReclamoBE getCombosReclamo()
        {
            CombosReclamoBE rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_COMBOS_RECLAMO");                
                function.Invoke(dest);

                IRfcTable T_MOTIVO = function.GetTable("T_MOTIVO");
                IRfcTable T_STATUS = function.GetTable("T_STATUS");
                IRfcTable T_RESULTADO = function.GetTable("T_RESULTADO");
                IRfcTable T_SECTOR = function.GetTable("T_SECTOR");
                IRfcTable T_VENDEDORES = function.GetTable("T_VENDEDORES");
                IRfcTable T_RETURN = function.GetTable("T_RETURN");
                IRfcTable T_JUSTIFICACION = function.GetTable("T_JUSTIFICACION");

                rpta = new CombosReclamoBE();
                GenericBE objG = null;
                foreach (IRfcStructure item in T_MOTIVO)
                {
                    objG = new GenericBE();
                    objG.Codigo = item["ID_ELEMENTO"].GetString();
                    objG.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_MOTIVO.Add(objG);
                }
                foreach (IRfcStructure item in T_STATUS)
                {
                    objG = new GenericBE();
                    objG.Codigo = item["ID_ELEMENTO"].GetString();
                    objG.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_STATUS.Add(objG);
                }
                foreach (IRfcStructure item in T_RESULTADO)
                {
                    objG = new GenericBE();
                    objG.Codigo = item["ID_ELEMENTO"].GetString();
                    objG.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_RESULTADO.Add(objG);
                }
                foreach (IRfcStructure item in T_SECTOR)
                {
                    objG = new GenericBE();
                    objG.Codigo = item["ID_ELEMENTO"].GetString();
                    objG.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_SECTOR.Add(objG);
                }
                foreach (IRfcStructure item in T_VENDEDORES)
                {
                    JustificaionBE objJ = new JustificaionBE();
                    objJ.CodDep = item["ID_DEPENDIENTE"].GetString();
                    objJ.Codigo = item["ID_ELEMENTO"].GetString();
                    objJ.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_VENDEDORES.Add(objJ);
                }
                foreach (IRfcStructure item in T_JUSTIFICACION)
                {
                    JustificaionBE objJ = new JustificaionBE();
                    objJ.CodDep = item["ID_DEPENDIENTE"].GetString();
                    objJ.Codigo = item["ID_ELEMENTO"].GetString();
                    objJ.Descripcion = item["ID_ELEMENTO"].GetString() + "::" + item["N_ELEMENTO"].GetString();
                    rpta.T_Justi.Add(objJ);
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public DECOR.BL.BE.GenericBE set_Reclamo(DECOR.BL.BE.DocReclamoBE pObjReclamo)
        {
            GenericBE rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                rpta = new GenericBE();
                string rec = string.Empty;

                RfcStructureMetadata smVBKAVB = dest.Repository.GetStructureMetadata("VBKAVB");
                IRfcTable t_VBKAVB = smVBKAVB.CreateTable();
                //contactos
                if (!(pObjReclamo.Contactos == null))
                {
                    IRfcStructure itmVBKAVB = smVBKAVB.CreateStructure();

                    //rec = pObjReclamo.Contactos.VBELN.PadLeft(10, '0');
                    //itmVBKAVB.SetValue("VBELN", pObjReclamo.Contactos.VBELN);
                    itmVBKAVB.SetValue("ERDAT", pObjReclamo.Contactos.ERDAT);
                    itmVBKAVB.SetValue("ERZET", Convert.ToDateTime(pObjReclamo.Contactos.ERZET));
                    itmVBKAVB.SetValue("ERNAM", pObjReclamo.Contactos.ERNAM);
                    itmVBKAVB.SetValue("AEDAT", "");
                    itmVBKAVB.SetValue("AEZET", "");
                    itmVBKAVB.SetValue("AENAM", "");
                    itmVBKAVB.SetValue("KTAAR", pObjReclamo.Contactos.KTAAR);
                    itmVBKAVB.SetValue("VBTYP", pObjReclamo.Contactos.VBTYP);
                    itmVBKAVB.SetValue("TRVOG", pObjReclamo.Contactos.TRVOG);
                    itmVBKAVB.SetValue("VKORG", pObjReclamo.Contactos.VKORG);
                    itmVBKAVB.SetValue("VTWEG", pObjReclamo.Contactos.VTWEG);
                    itmVBKAVB.SetValue("SPART", pObjReclamo.Contactos.SPART);
                    itmVBKAVB.SetValue("VKBUR", pObjReclamo.Contactos.VKBUR);
                    itmVBKAVB.SetValue("VKGRP", pObjReclamo.Contactos.VKGRP);
                    itmVBKAVB.SetValue("KTABG", pObjReclamo.Contactos.KTABG);
                    itmVBKAVB.SetValue("KTAEN", pObjReclamo.Contactos.KTAEN);
                    itmVBKAVB.SetValue("KTABT", pObjReclamo.Contactos.KTABT);
                    itmVBKAVB.SetValue("KTAET", pObjReclamo.Contactos.KTAET);
                    itmVBKAVB.SetValue("KTAGR", pObjReclamo.Contactos.KTAGR);
                    itmVBKAVB.SetValue("KTAST", pObjReclamo.Contactos.KTAST);
                    itmVBKAVB.SetValue("KTAER", pObjReclamo.Contactos.KTAER);
                    itmVBKAVB.SetValue("KTAFK", pObjReclamo.Contactos.KTAFK);
                    itmVBKAVB.SetValue("KTEXT", pObjReclamo.Contactos.KTEXT);
                    itmVBKAVB.SetValue("KUNNR", pObjReclamo.Contactos.KUNNR);
                    itmVBKAVB.SetValue("GBSTK", pObjReclamo.Contactos.GBSTK);
                    itmVBKAVB.SetValue("PARVW", pObjReclamo.Contactos.PARVW);
                    itmVBKAVB.SetValue("DIRECTION", pObjReclamo.Contactos.DIRECTION);
                    itmVBKAVB.SetValue("KTEXT_MC", pObjReclamo.Contactos.KTEXT_MC);
                    itmVBKAVB.SetValue("KTEXT_MC_LANGU", pObjReclamo.Contactos.KTEXT_MC_LANGU);
                    itmVBKAVB.SetValue("VGBEL", pObjReclamo.Contactos.VGBEL.PadLeft(10, '0'));
                    itmVBKAVB.SetValue("UPDKZ", "I");
                    itmVBKAVB.SetValue("KTAEB", pObjReclamo.Contactos.KTAEB);
                    t_VBKAVB.Append(itmVBKAVB);
                }

                RfcStructureMetadata smVBUKVB = dest.Repository.GetStructureMetadata("VBUKVB");
                IRfcTable t_VBUKVB = smVBUKVB.CreateTable();
                //Doc Comercial
                if (!(pObjReclamo.DocComercial == null))
                {
                    IRfcStructure itmVBUKVB = smVBUKVB.CreateStructure();
                    itmVBUKVB.SetValue("GBSTK", pObjReclamo.DocComercial.GBSTK);
                    itmVBUKVB.SetValue("UVALL", pObjReclamo.DocComercial.UVALL);
                    itmVBUKVB.SetValue("VBTYP", pObjReclamo.DocComercial.VBTYP);
                    itmVBUKVB.SetValue("VBOBJ", pObjReclamo.DocComercial.VBOBJ);
                    itmVBUKVB.SetValue("UPDKZ", "I");
                    t_VBUKVB.Append(itmVBUKVB);
                }

                RfcStructureMetadata smRECLAMOS = dest.Repository.GetStructureMetadata("ZWEB_RECLAMOS");
                IRfcTable t_RECLAMOS = smRECLAMOS.CreateTable();
                //ZWEB_Reclamo
                if (!(pObjReclamo.Z_Reclamo == null))
                {

                    IRfcStructure itmRECLAMOS = smRECLAMOS.CreateStructure();
                    itmRECLAMOS.SetValue("MATNR", pObjReclamo.Z_Reclamo.MATNR);
                    itmRECLAMOS.SetValue("MATN2", pObjReclamo.Z_Reclamo.MATNR2);
                    itmRECLAMOS.SetValue("RECLA", pObjReclamo.Z_Reclamo.RECLA);
                    itmRECLAMOS.SetValue("STAT1", pObjReclamo.Z_Reclamo.STAT1);
                    itmRECLAMOS.SetValue("USER1", pObjReclamo.Z_Reclamo.USER1);
                    itmRECLAMOS.SetValue("CMM1", pObjReclamo.Z_Reclamo.CMM1);
                    itmRECLAMOS.SetValue("STAT2", pObjReclamo.Z_Reclamo.STAT2);
                    itmRECLAMOS.SetValue("USER2", pObjReclamo.Z_Reclamo.USER2);
                    itmRECLAMOS.SetValue("CMM2", pObjReclamo.Z_Reclamo.CMM2);
                    itmRECLAMOS.SetValue("STAT3", pObjReclamo.Z_Reclamo.STAT3);
                    itmRECLAMOS.SetValue("USER3", pObjReclamo.Z_Reclamo.USER3);
                    itmRECLAMOS.SetValue("CMM3", pObjReclamo.Z_Reclamo.CMM3);
                    //itmRECLAMOS.SetValue("VBELN", rec);
                    itmRECLAMOS.SetValue("FCHA1", pObjReclamo.Z_Reclamo.FCHA1);
                    itmRECLAMOS.SetValue("FCHA2", pObjReclamo.Z_Reclamo.FCHA2);
                    itmRECLAMOS.SetValue("FCHA3", pObjReclamo.Z_Reclamo.FCHA3);
                    //se adiciono el stat4 con código 9 - rhuapaya
                    itmRECLAMOS.SetValue("STAT4", pObjReclamo.Z_Reclamo.STAT4);
                    itmRECLAMOS.SetValue("USER4", pObjReclamo.Z_Reclamo.USER4);
                    itmRECLAMOS.SetValue("CMM4", pObjReclamo.Z_Reclamo.CMM4);
                    itmRECLAMOS.SetValue("FCHA4", pObjReclamo.Z_Reclamo.FCHA4);
                    //***************************************************************
                    itmRECLAMOS.SetValue("CPOSTAL", pObjReclamo.Z_Reclamo.CPOSTAL);
                    itmRECLAMOS.SetValue("DIRECCION", pObjReclamo.Z_Reclamo.DIRECCION);
                    itmRECLAMOS.SetValue("NIF", pObjReclamo.Z_Reclamo.NIF);
                    itmRECLAMOS.SetValue("PCONTACTO", pObjReclamo.Z_Reclamo.PCONTACTO);
                    itmRECLAMOS.SetValue("TELEFONO", pObjReclamo.Z_Reclamo.TELEFONO);

                    t_RECLAMOS.Append(itmRECLAMOS);
                }
                RfcStructureMetadata smVBPAVB = dest.Repository.GetStructureMetadata("VBPAVB");
                IRfcTable t_VBPAVB = smVBPAVB.CreateTable();
                //Interlocutor 
                foreach (InterlocutorReclamoBE i in pObjReclamo.Interlocutor)
                {
                    
                    IRfcStructure itmVBPAVB = smVBPAVB.CreateStructure();
                    itmVBPAVB.SetValue("VBELN", "$000000001");
                    itmVBPAVB.SetValue("POSNR", i.POSNR);
                    itmVBPAVB.SetValue("PARVW", i.PARVW);
                    itmVBPAVB.SetValue("KUNNR", i.KUNNR);
                    itmVBPAVB.SetValue("PERNR", i.PERNR);
                    itmVBPAVB.SetValue("PARNR", i.PARNR);
                    itmVBPAVB.SetValue("ADRNR", i.ADRNR);
                    if (i.PARVW.Equals("AG"))
                    {
                        itmVBPAVB.SetValue("ADRNR", "AG $00001");
                        itmVBPAVB.SetValue("LAND1", "PE");
                        itmVBPAVB.SetValue("ADRDA", "E");
                        itmVBPAVB.SetValue("XCPDK", "X"); //falta pasar
                        itmVBPAVB.SetValue("PARVW_FF", "X");
                        itmVBPAVB.SetValue("NAME1", i.NOMBRE);
                        itmVBPAVB.SetValue("NRART", "KU");
                        itmVBPAVB.SetValue("FEHGR", "07");
                        itmVBPAVB.SetValue("SPRAS", "S");
                        itmVBPAVB.SetValue("TELFX", i.Telefono);
                        itmVBPAVB.SetValue("J_1KFTBUS", i.Direccion);
                        itmVBPAVB.SetValue("J_1KFREPRE", i.Ciudad); //ort01
                        itmVBPAVB.SetValue("STKZN", "1"); //ADDRESS_TYPE
                        itmVBPAVB.SetValue("REFLOGSYS", i.CodPostal); // PSTLZ
                        itmVBPAVB.SetValue("HITYP", "X"); // indica que es eventual
                        itmVBPAVB.SetValue("ABLAD", i.Mail);
                        itmVBPAVB.SetValue("STCEG", i.NIF);
                    }
                    //else if (i.PARVW.Equals("AP"))
                    //{
                        //itmVBPAVB.SetValue("KUNNR", "10");
                      //  itmVBPAVB.SetValue("ADRNR", "AP $00001");
                        //itmVBPAVB.SetValue("PARNR", "0000000014");
                        //itmVBPAVB.SetValue("NAME1", i.NOMBRE);
                        //itmVBPAVB.SetValue("TELFX", i.Telefono);
                        //itmVBPAVB.SetValue("J_1KFTBUS", i.Direccion);
                        //itmVBPAVB.SetValue("J_1KFREPRE", i.Ciudad);
                        //itmVBPAVB.SetValue("REFLOGSYS", i.CodPostal);

                        //itmVBPAVB.SetValue("LAND1", "PE");
                        //itmVBPAVB.SetValue("ADRDA", "E");
                        //itmVBPAVB.SetValue("XCPDK", "X"); //falta pasar
                        //itmVBPAVB.SetValue("PARVW_FF", "X");
                        //itmVBPAVB.SetValue("NRART", "KU");
                        //itmVBPAVB.SetValue("FEHGR", "07");
                        //itmVBPAVB.SetValue("SPRAS", "S");
                        //itmVBPAVB.SetValue("STKZN", "1"); //ADDRESS_TYPE
                        //itmVBPAVB.SetValue("REFLOGSYS", i.CodPostal); // PSTLZ
                        //itmVBPAVB.SetValue("HITYP", "X"); // indica que es eventual
                    //}
                    itmVBPAVB.SetValue("UPDKZ", "I");

                    t_VBPAVB.Append(itmVBPAVB);
                }
                //verifico que el largo de los textos no sea mayor a 90 caracteres.
                int posSpace = 0;
                string texto = "";
                int contInicio = 0;
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    posSpace = 0;
                    contInicio = 0;
                    texto = "";
                    posSpace = (tb.Descripcion.Length / 80);
                    if (posSpace * 80 <= tb.Descripcion.Length) { posSpace++; }
                    posSpace--;
                    if (tb.Descripcion.Length > 130)
                    {
                        for (int cont = 1; cont <= posSpace; cont++)
                        {
                            if (!tb.Descripcion.Substring(cont * 80, 1).Equals("\r\n") &&
                                !tb.Descripcion.Substring(cont * 79, 1).Equals("\r\n"))
                            {
                                tb.Descripcion = tb.Descripcion.Insert(cont * 80, "\r\n");
                            }
                        }
                    }
                }

                RfcStructureMetadata smTEXTOS_RECLAMO = dest.Repository.GetStructureMetadata("ZWEB_TEXTOS_RECLAMO");
                IRfcTable t_smTEXTOS_RECLAMO = smTEXTOS_RECLAMO.CreateTable();
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    int k = tb.Descripcion.Length;
                    tb.Descripcion = tb.Descripcion.Replace(Environment.NewLine, "|") + "|";
                    if (tb.Descripcion.Length > 0)
                    {
                        if (tb.Descripcion.IndexOf("|", 0) > 0)
                        {
                            for (int i = 0, j = 0; tb.Descripcion.IndexOf("|", 0) >= 0; )
                            {
                                //ZWEB_TEXTOS_RECLAMO t = new ZWEB_TEXTOS_RECLAMO();                                
                                IRfcStructure itmsmTEXTOS_RECLAMO = smTEXTOS_RECLAMO.CreateStructure();
                                i = tb.Descripcion.IndexOf("|", j);
                                itmsmTEXTOS_RECLAMO.SetValue("FID", tb.CodTexto);
                                itmsmTEXTOS_RECLAMO.SetValue("TDLINE", tb.Descripcion.Substring(0, i));
                                tb.Descripcion = tb.Descripcion.Substring(i + 1);
                                t_smTEXTOS_RECLAMO.Append(itmsmTEXTOS_RECLAMO);
                                i++;
                            }
                        }
                    }
                }

                RfcStructureMetadata smReturn = dest.Repository.GetStructureMetadata("BAPIRET2");
                IRfcTable t_smReturn = smReturn.CreateTable();

                function = dest.Repository.CreateFunction("ZWEB_CREA_RECLAMOS");
                function.SetValue("T_FXVBKA", t_VBKAVB);
                function.SetValue("T_FXVBPA", t_VBPAVB);
                function.SetValue("T_FXVBUK", t_VBUKVB);
                function.SetValue("T_Z_RECLAMOS", t_RECLAMOS);
                function.SetValue("T_TEXTOS", t_smTEXTOS_RECLAMO);
                function.Invoke(dest);
                rpta.Descripcion = string.Empty;
                IRfcTable T_RETURN = function.GetTable("T_RETURN");

                foreach (IRfcStructure item in T_RETURN)
                {
                    if (item.GetString("TYPE").Equals("S"))
                    {
                        rpta.Codigo = "S";
                        rpta.Descripcion = item.GetString("MESSAGE").Trim() + ".";
                        break;
                    }
                    else
                    {
                        rpta.Codigo = item.GetString("TYPE");
                        rpta.Descripcion = rpta.Descripcion + ", " + item.GetString("MESSAGE").Trim() + ".";
                    }
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public List<DECOR.BL.BE.InterlocutorReclamoBE> getInterXEmpresa(string P_Cliente, string P_Contac, string P_Respon, string P_Vkorg, string P_Vtweg, string P_AD)
        {
            List<InterlocutorReclamoBE> rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);

                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_BUSCA_INTERLOCUTOR");
                function.SetValue("P_CLIENTE", P_Cliente);
                function.SetValue("P_RESPON", P_Respon);
                function.SetValue("P_CONTAC", P_Contac);
                function.SetValue("P_VKORG", P_Vkorg);
                function.SetValue("P_VTWEG", P_Vtweg);
                function.SetValue("P_AD", P_AD);
                function.Invoke(dest);

                IRfcTable T_INTERLOCUTORES = function.GetTable("T_INTERLOCUTORES");
                rpta = new List<InterlocutorReclamoBE>();
                string nif = string.Empty;
                foreach (IRfcStructure z in T_INTERLOCUTORES)
                {
                    InterlocutorReclamoBE i = new InterlocutorReclamoBE();
                    i.PARVW = z["PARVW"].GetString();
                    i.POSNR = "000000";
                    i.Calle = z["STREET"].GetString();
                    i.NOMBRE = z["NOMBRE"].GetString();
                    i.Direccion = z["STREET"].GetString();
                    i.Ciudad = z["CITY"].GetString();
                    i.CodPostal = z["POSTL_CODE"].GetString();
                    i.ADRNR = z["ADRNR"].GetString();
                    i.Telefono = z["TELEPHONE"].GetString();
                    i.Mail = z["E_MAIL"].GetString();
                    if (z["PARVW"].GetString().Equals("AG"))
                    {
                        if (P_Cliente.Trim('0').Equals(z["KUNNR"].GetString().Trim('0')))
                        {
                            i.KUNNR = z["KUNNR"].GetString().PadLeft(10, '0');
                            i.EsVentual = false;
                        }
                        else if (z["KUNNR"].GetString().Trim().Equals("X"))
                        {
                            i.KUNNR = z["STCD1"].GetString().PadLeft(10, '0');
                            i.EsVentual = true;
                        }
                    }
                    if (z["PARVW"].GetString().Equals("WE"))
                    {
                        i.KUNNR = z["KUNNR"].GetString().PadLeft(10, '0');
                        nif = z["STCD1"].GetString();
                    }
                    else if (z["PARVW"].GetString().Equals("AP"))
                    {
                        i.PARNR = z["KUNNR"].GetString().PadLeft(10, '0');
                        i.NIF = z["STCD1"].GetString();
                    }
                    else if (z["PARVW"].GetString().Equals("VE") || z["PARVW"].GetString().Equals("ZM"))
                    {
                        i.PERNR = z["KUNNR"].GetString().PadLeft(8, '0');
                    }                       

                    rpta.Add(i);
                }
                if (rpta.Find(X => X.PARVW.Equals("AG")) != null)
                {
                    rpta.Find(X => X.PARVW.Equals("AG")).NIF = nif;
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public List<DECOR.BL.BE.ReporteReclamoBE> getReporteReclamo(string P_NREC, string P_PEDV, 
            string P_KUNNR, string P_NCLIE, string P_MATNR, DateTime P_FECINI, DateTime P_FECFIN, 
            string P_USUARIO, DateTime P_FECINI_CON_I, DateTime P_FECINI_CON_F, DateTime P_FECFIN_CON_I,
            DateTime P_FECFIN_CON_F, string ESTADO)
        {
            //variables            
            List<ReporteReclamoBE> rpta = new List<ReporteReclamoBE>();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            P_KUNNR = P_KUNNR.Equals("") ? "*" : P_KUNNR;
            P_MATNR = P_MATNR.Equals("") ? "*" : P_MATNR;
            P_NCLIE = P_NCLIE.Equals("") ? "*" : "*" + P_NCLIE + "*";
            P_NREC = P_NREC.Equals("") ? "*" : P_NREC.PadLeft(10, '0');
            P_PEDV = P_PEDV.Equals("") ? "*" : P_PEDV.PadLeft(10, '0');
            P_USUARIO = P_USUARIO.Equals("") ? "*" : P_USUARIO;

            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);

                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_BUSCA_RECLAMOS");
                function.SetValue("P_NREC", P_NREC);
                function.SetValue("P_PEDV", P_PEDV);
                function.SetValue("P_KUNNR", P_KUNNR);
                function.SetValue("P_NCLIE", P_NCLIE);
                function.SetValue("P_MATNR", P_MATNR);
                function.SetValue("P_FECINI", P_FECINI.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECINI));
                function.SetValue("P_FECFIN", P_FECFIN.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECFIN));
                function.SetValue("P_USUARIO", P_USUARIO);
                function.SetValue("P_FECINI_CON_I", P_FECINI_CON_I.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECINI_CON_I));
                function.SetValue("P_FECINI_CON_F", P_FECINI_CON_F.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECINI_CON_F));
                function.SetValue("P_FECFIN_CON_I", P_FECFIN_CON_I.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECFIN_CON_I));
                function.SetValue("P_FECFIN_CON_F", P_FECFIN_CON_F.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECFIN_CON_F));

                function.Invoke(dest);

                IRfcTable T_LISTA_RECLAMOS = function.GetTable("T_LISTA_RECLAMOS");

                foreach (IRfcStructure item in T_LISTA_RECLAMOS)
                {
                    ReporteReclamoBE r = new ReporteReclamoBE();
                    r.VBELN = item["VBELN"].GetString();
                    r.KTABG = Convert.ToDateTime(item["KTABG"].GetString()).ToShortDateString();
                    r.KUNNR = item["KUNNR"].GetString();
                    r.NAME1 = item["NAME1"].GetString();
                    r.MATNR = item["MATNR"].GetString().Trim('0');
                    r.MAKTX = item["MAKTX"].GetString().Trim('0');
                    r.VGBEL = item["VGBEL"].GetString();
                    r.STAT = item["STAT"].GetString();

                    rpta.Add(r);
                }
                P_MATNR = P_MATNR.Trim('0');
                if (!P_MATNR.Equals("*"))
                {
                    rpta.RemoveAll(x => !P_MATNR.Equals(x.MATNR.Trim('0').Trim()));
                }
                if (ESTADO != "")
                {
                    rpta.RemoveAll(x => x.STAT != ESTADO);
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public List<DECOR.BL.BE.GenericBE> getValidaData(string pPedido, string pMat1, string pMat2, string pRef)
        {
            List<GenericBE> rpta = null;

            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VALIDA_DATOS_RECLAMO");
                function.SetValue("P_MATNR1", pMat1);
                function.SetValue("P_MATNR2", pMat2);
                function.SetValue("P_REC_REF", pRef);
                function.SetValue("P_PEDIDO", pPedido);
                function.Invoke(dest);

                IRfcTable T_RETURN = function.GetTable("T_RETURN");
                rpta = new List<GenericBE>();
                foreach (IRfcStructure r in T_RETURN)
                {
                    GenericBE g = new GenericBE();
                    g.Descripcion = "Invalido";
                    g.Codigo = r["TYPE"].GetString();
                    if (r["TYPE"].GetString().Equals("p") && !r["MESSAGE"].GetString().Equals(""))
                    {
                        g.Descripcion = "Valido";
                    }
                    else if (r["TYPE"].GetString().Equals("1") && !r["MESSAGE"].GetString().Equals(""))
                    {
                        g.Codigo = "m" + r["TYPE"].GetString();
                        g.Descripcion = "Valido";
                    }
                    else if (r["TYPE"].GetString().Equals("2") && !r["MESSAGE"].GetString().Equals(""))
                    {
                        g.Codigo = "m" + r["TYPE"].GetString();
                        g.Descripcion = "Valido";
                    }
                    rpta.Add(g);
                }
                if (rpta.Find(x => x.Codigo.Equals("m1")) == null)
                {
                    GenericBE g1 = new GenericBE();
                    g1.Codigo = "m1";
                    g1.Descripcion = "Invalido";
                    rpta.Add(g1);
                }
                if (rpta.Find(x => x.Codigo.Equals("m2")) == null)
                {
                    GenericBE g2 = new GenericBE();
                    g2.Codigo = "m2";
                    g2.Descripcion = "Invalido";
                    rpta.Add(g2);
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public DECOR.BL.BE.DocReclamoBE getReclamo(string pNroReclamo)
        {
            DocReclamoBE rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            try
            {
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VER_RECLAMO");
                function.SetValue("P_VBELN", pNroReclamo);
                function.Invoke(dest);

                IRfcTable T_VBUK = function.GetTable("T_VBUK");
                IRfcTable T_VBKA = function.GetTable("T_VBKA");                
                IRfcTable T_Z_RECLAMO = function.GetTable("T_Z_RECLAMO");
                IRfcTable T_VBPA = function.GetTable("T_VBPA");
                IRfcTable T_TEXTOS = function.GetTable("T_TEXTOS");
                IRfcTable T_VISITAS = function.GetTable("T_VISITAS");

                rpta = new DocReclamoBE();
                //contactos
                foreach (IRfcStructure z in T_VBKA)
                {
                    rpta.Contactos.VBELN = z.GetString("VBELN");
                    rpta.Contactos.ERDAT = DateTime.Parse(z.GetString("ERDAT"));
                    rpta.Contactos.ERZET = z.GetValue("ERZET").ToString() == "00:00:00" ? "" : z.GetValue("ERZET").ToString();//.Substring(0, 2) + ":" + z.GetString("ERZET").Substring(2, 2) + ":" + z.GetString("ERZET").Substring(4, 2);
                    rpta.Contactos.ERNAM = z.GetString("ERNAM");
                    rpta.Contactos.AEDAT = z.GetString("AEDAT") == "0000-00-00"? DateTime.MinValue : Convert.ToDateTime(z.GetString("AEDAT"));
                    rpta.Contactos.AEZET = z.GetValue("AEZET").ToString() == "00:00:00" ? "" : z.GetValue("AEZET").ToString();//.Substring(0, 2) + ":" + z.GetString("AEZET").Substring(2, 2) + ":" + z.GetString("AEZET").Substring(4, 2);
                    rpta.Contactos.AENAM = z.GetString("AENAM");
                    rpta.Contactos.KTAAR = z.GetString("KTAAR");
                    rpta.Contactos.VBTYP = z.GetString("VBTYP");
                    rpta.Contactos.TRVOG = z.GetString("TRVOG");
                    rpta.Contactos.VKORG = z.GetString("VKORG");
                    rpta.Contactos.VTWEG = z.GetString("VTWEG");
                    rpta.Contactos.SPART = z.GetString("SPART");
                    rpta.Contactos.VKBUR = z.GetString("VKBUR");
                    rpta.Contactos.VKGRP = z.GetString("VKGRP");
                    rpta.Contactos.KTABG = Convert.ToDateTime(z.GetString("KTABG"));
                    rpta.Contactos.KTAEN = Convert.ToDateTime(z.GetString("KTAEN"));
                    rpta.Contactos.KTABT = z.GetString("KTABT").Substring(0, 2) + ":" + z.GetString("KTABT").Substring(3, 2) + ":" + z.GetString("KTABT").Substring(6, 2);
                    rpta.Contactos.KTAET = z.GetString("KTAET").Substring(0, 2) + ":" + z.GetString("KTAET").Substring(3, 2) + ":" + z.GetString("KTAET").Substring(6, 2);
                    rpta.Contactos.KTAGR = z.GetString("KTAGR");
                    rpta.Contactos.KTAST = z.GetString("KTAST");
                    rpta.Contactos.KTAER = z.GetString("KTAER");
                    rpta.Contactos.KTAFK = z.GetString("KTAFK");
                    rpta.Contactos.KTEXT = z.GetString("KTEXT");
                    rpta.Contactos.KUNNR = z.GetString("KUNNR");
                    rpta.Contactos.GBSTK = z.GetString("GBSTK");
                    rpta.Contactos.PARVW = z.GetString("PARVW");
                    rpta.Contactos.DIRECTION = z.GetString("DIRECTION");
                    rpta.Contactos.KTEXT_MC = z.GetString("KTEXT_MC");
                    rpta.Contactos.KTEXT_MC_LANGU = z.GetString("KTEXT_MC_LANGU");
                    rpta.Contactos.VGBEL = z.GetString("VGBEL");
                    rpta.Contactos.KTAEB = z.GetString("KTAEB");
                    break;
                }
                //Doc Comercial
                
                foreach (IRfcStructure item in T_VBUK)
                {
                    rpta.DocComercial.GBSTK = item.GetString("GBSTK");
                    rpta.DocComercial.UVALL = item.GetString("UVALL");
                    rpta.DocComercial.VBTYP = item.GetString("VBTYP");
                    rpta.DocComercial.VBOBJ = item.GetString("VBOBJ");
                    rpta.DocComercial.VBELN = item.GetString("VBELN");
                    break;
                }
                //ZWEB_Reclamo
                
                foreach (IRfcStructure item in T_Z_RECLAMO)
                {
                    rpta.Z_Reclamo.MATNR = item.GetString("MATNR");
                    rpta.Z_Reclamo.MATNR2 = item.GetString("MATN2");
                    rpta.Z_Reclamo.RECLA = item.GetString("RECLA");
                    rpta.Z_Reclamo.STAT1 = item.GetString("STAT1");
                    rpta.Z_Reclamo.USER1 = item.GetString("USER1");
                    rpta.Z_Reclamo.CMM1 = item.GetString("CMM1");
                    rpta.Z_Reclamo.STAT2 = item.GetString("STAT2");
                    rpta.Z_Reclamo.USER2 = item.GetString("USER2");
                    rpta.Z_Reclamo.CMM2 = item.GetString("CMM2");
                    rpta.Z_Reclamo.STAT3 = item.GetString("STAT3");
                    rpta.Z_Reclamo.USER3 = item.GetString("USER3");
                    rpta.Z_Reclamo.CMM3 = item.GetString("CMM3");
                    rpta.Z_Reclamo.VBELN = item.GetString("VBELN");
                    rpta.Z_Reclamo.FCHA1 = DateTime.Parse(item.GetString("FCHA1"));
                    rpta.Z_Reclamo.FCHA2 = DateTime.Parse(item.GetString("FCHA2"));
                    rpta.Z_Reclamo.FCHA3 = DateTime.Parse(item.GetString("FCHA3"));
                    //se adicionó el estado 4 con codigo 9 -- rhuapaya
                    rpta.Z_Reclamo.STAT4 = item.GetString("STAT4");
                    rpta.Z_Reclamo.USER4 = item.GetString("USER4");
                    rpta.Z_Reclamo.CMM4 = item.GetString("CMM4");
                    rpta.Z_Reclamo.FCHA4 = DateTime.Parse(item.GetString("FCHA4"));
                    //****************************************************************************
                    rpta.Z_Reclamo.CPOSTAL = item.GetString("CPOSTAL");
                    rpta.Z_Reclamo.PCONTACTO = item.GetString("PCONTACTO");
                    rpta.Z_Reclamo.NIF = item.GetString("NIF");
                    rpta.Z_Reclamo.TELEFONO = item.GetString("TELEFONO");
                    rpta.Z_Reclamo.DIRECCION = item.GetString("DIRECCION");
                    break;
                }
                //Interlocutor
                
                foreach (IRfcStructure i in T_VBPA)
                {
                    InterlocutorReclamoBE it = new InterlocutorReclamoBE();
                    it.POSNR = i.GetString("POSNR");
                    it.PARVW = i.GetString("PARVW");
                    it.KUNNR = i.GetString("KUNNR");
                    it.PERNR = i.GetString("PERNR");
                    it.PARNR = i.GetString("PARNR");
                    it.ADRNR = i.GetString("ADRNR");
                    it.VBELN = i.GetString("VBELN");
                    it.Mail = i.GetString("ABLAD");
                    it.NIF = i.GetString("STCEG");
                    if (i.GetString("PARVW").Equals("AP"))
                        it.Cargo = i.GetString("ABLAD").Equals("") ? i.GetString("KNREF") : "";

                    rpta.Interlocutor.Add(it);
                }

                
                foreach (IRfcStructure tb in T_TEXTOS)
                {
                    TextoBE t = new TextoBE();
                    string texto = string.Empty;
                    string puntoAparte = "." + Environment.NewLine;
                    if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID"))) != null)
                    {
                        t = rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID")));
                    }
                    else
                    {
                        t.CodTexto = tb.GetString("FID");
                    }
                    if (!tb.GetString("TDLINE").Equals(""))
                    {
                        t.Descripcion += tb.GetString("TDLINE"); //"\r\n" + " "
                        t.Descripcion = t.Descripcion.Trim();
                        if (tb.GetString("TDLINE").Length < 79 && t.Descripcion.IndexOf(".", t.Descripcion.Length - 1) != -1)
                        {
                            t.Descripcion = t.Descripcion + " "; // Environment.NewLine;
                        }
                        if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID"))) == null)
                        {
                            rpta.Texto.Add(t);
                        }
                    }
                }
                
                foreach (IRfcStructure item in T_VISITAS)
                {
                    ZReclamoVisitasBE vi = new ZReclamoVisitasBE();
                    vi.MANDT = item.GetString("Mandt");
                    vi.VBELN = item.GetString("Vbeln");
                    vi.KTAST = item.GetString("Ktast");
                    vi.NROVIS = item.GetString("Nrovis");
                    vi.FECHA = Convert.ToDateTime(item.GetString("Fecha"));
                    vi.TIME = item.GetString("Hora").Substring(0, 2) + ":" + item.GetString("Hora").Substring(3, 2);
                    vi.RESP = item.GetString("Resp");
                    vi.COMENT = item.GetString("Coment");

                    rpta.Z_ReclamoVisita.Add(vi);
                }
            }
            catch (Exception ex)
            {
                rpta = null;
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public DECOR.BL.BE.GenericBE set_ModificarReclamo(DECOR.BL.BE.DocReclamoBE pObjReclamo)
        {
            GenericBE rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                rpta = new GenericBE();
                string rec = string.Empty;

                RfcStructureMetadata smVBKAVB = dest.Repository.GetStructureMetadata("VBKAVB");
                IRfcTable t_VBKAVB = smVBKAVB.CreateTable();
                //contactos
                if (!(pObjReclamo.Contactos == null))
                {
                    IRfcStructure itmVBKAVB = smVBKAVB.CreateStructure();

                    rec = pObjReclamo.Contactos.VBELN.PadLeft(10, '0');
                    itmVBKAVB.SetValue("VBELN", pObjReclamo.Contactos.VBELN == null ? "" : pObjReclamo.Contactos.VBELN);
                    itmVBKAVB.SetValue("ERDAT", ParametroDALC.dateNetToSap(pObjReclamo.Contactos.ERDAT));
                    itmVBKAVB.SetValue("ERZET", pObjReclamo.Contactos.ERZET == null ? "" : pObjReclamo.Contactos.ERZET);
                    itmVBKAVB.SetValue("ERNAM", pObjReclamo.Contactos.ERNAM == null ? "" : pObjReclamo.Contactos.ERNAM);
                    itmVBKAVB.SetValue("AEDAT", ParametroDALC.dateNetToSap(pObjReclamo.Contactos.AEDAT));
                    itmVBKAVB.SetValue("AEZET", pObjReclamo.Contactos.AEZET == null ? "" : pObjReclamo.Contactos.AEZET);
                    itmVBKAVB.SetValue("AENAM", pObjReclamo.Contactos.AENAM == null ? "" : pObjReclamo.Contactos.AENAM);
                    itmVBKAVB.SetValue("KTAAR", pObjReclamo.Contactos.KTAAR == null ? "" : pObjReclamo.Contactos.KTAAR);
                    itmVBKAVB.SetValue("VBTYP", pObjReclamo.Contactos.VBTYP == null ? "" : pObjReclamo.Contactos.VBTYP);
                    itmVBKAVB.SetValue("TRVOG", pObjReclamo.Contactos.TRVOG == null ? "" : pObjReclamo.Contactos.TRVOG);
                    itmVBKAVB.SetValue("VKORG", pObjReclamo.Contactos.VKORG == null ? "" : pObjReclamo.Contactos.VKORG);
                    itmVBKAVB.SetValue("VTWEG", pObjReclamo.Contactos.VTWEG == null ? "" : pObjReclamo.Contactos.VTWEG);
                    itmVBKAVB.SetValue("SPART", pObjReclamo.Contactos.SPART == null ? "" : pObjReclamo.Contactos.SPART);
                    itmVBKAVB.SetValue("VKBUR", pObjReclamo.Contactos.VKBUR == null ? "" : pObjReclamo.Contactos.VKBUR);
                    itmVBKAVB.SetValue("VKGRP", pObjReclamo.Contactos.VKGRP == null ? "" : pObjReclamo.Contactos.VKGRP);
                    itmVBKAVB.SetValue("KTABG", ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTABG));
                    itmVBKAVB.SetValue("KTAEN", ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTAEN));
                    itmVBKAVB.SetValue("KTABT", pObjReclamo.Contactos.KTABT == null ? "" : pObjReclamo.Contactos.KTABT);
                    itmVBKAVB.SetValue("KTAET", pObjReclamo.Contactos.KTAET == null ? "" : pObjReclamo.Contactos.KTAET);
                    itmVBKAVB.SetValue("KTAGR", pObjReclamo.Contactos.KTAGR == null ? "" : pObjReclamo.Contactos.KTAGR);
                    itmVBKAVB.SetValue("KTAST", pObjReclamo.Contactos.KTAST == null ? "" : pObjReclamo.Contactos.KTAST);
                    itmVBKAVB.SetValue("KTAER", pObjReclamo.Contactos.KTAER == null ? "" : pObjReclamo.Contactos.KTAER);
                    itmVBKAVB.SetValue("KTAFK", pObjReclamo.Contactos.KTAFK == null ? "" : pObjReclamo.Contactos.KTAFK);
                    itmVBKAVB.SetValue("KTEXT", pObjReclamo.Contactos.KTEXT == null ? "" : pObjReclamo.Contactos.KTEXT);
                    itmVBKAVB.SetValue("KUNNR", pObjReclamo.Contactos.KUNNR == null ? "" : pObjReclamo.Contactos.KUNNR);
                    itmVBKAVB.SetValue("GBSTK", pObjReclamo.Contactos.GBSTK == null ? "" : pObjReclamo.Contactos.GBSTK);
                    itmVBKAVB.SetValue("PARVW", pObjReclamo.Contactos.PARVW == null ? "" : pObjReclamo.Contactos.PARVW);
                    itmVBKAVB.SetValue("DIRECTION", pObjReclamo.Contactos.DIRECTION == null ? "" : pObjReclamo.Contactos.DIRECTION);
                    itmVBKAVB.SetValue("KTEXT_MC", pObjReclamo.Contactos.KTEXT_MC == null ? "" : pObjReclamo.Contactos.KTEXT_MC);
                    itmVBKAVB.SetValue("KTEXT_MC_LANGU", pObjReclamo.Contactos.KTEXT_MC_LANGU == null ? "" : pObjReclamo.Contactos.KTEXT_MC_LANGU);
                    itmVBKAVB.SetValue("VGBEL", pObjReclamo.Contactos.VGBEL.PadLeft(10, '0'));
                    itmVBKAVB.SetValue("UPDKZ", "U");
                    itmVBKAVB.SetValue("KTAEB", pObjReclamo.Contactos.KTAEB == null ? "" : pObjReclamo.Contactos.KTAEB);
                    t_VBKAVB.Append(itmVBKAVB);
                }

                RfcStructureMetadata smVBUKVB = dest.Repository.GetStructureMetadata("VBUKVB");
                IRfcTable t_VBUKVB = smVBUKVB.CreateTable();
                //Doc Comercial
                if (!(pObjReclamo.DocComercial == null))
                {
                    IRfcStructure itmVBUKVB = smVBUKVB.CreateStructure();
                    itmVBUKVB.SetValue("GBSTK", pObjReclamo.DocComercial.GBSTK);
                    itmVBUKVB.SetValue("UVALL", pObjReclamo.DocComercial.UVALL);
                    itmVBUKVB.SetValue("VBTYP", pObjReclamo.DocComercial.VBTYP);
                    itmVBUKVB.SetValue("VBOBJ", pObjReclamo.DocComercial.VBOBJ);
                    itmVBUKVB.SetValue("UPDKZ", "U");
                    itmVBUKVB.SetValue("VBELN", rec);
                    t_VBUKVB.Append(itmVBUKVB);
                }

                RfcStructureMetadata smRECLAMOS = dest.Repository.GetStructureMetadata("ZWEB_RECLAMOS");
                IRfcTable t_RECLAMOS = smRECLAMOS.CreateTable();
                //ZWEB_Reclamo
                if (!(pObjReclamo.Z_Reclamo == null))
                {

                    IRfcStructure itmRECLAMOS = smRECLAMOS.CreateStructure();
                    itmRECLAMOS.SetValue("MATNR", pObjReclamo.Z_Reclamo.MATNR);
                    itmRECLAMOS.SetValue("MATN2", pObjReclamo.Z_Reclamo.MATNR2);
                    itmRECLAMOS.SetValue("RECLA", pObjReclamo.Z_Reclamo.RECLA);
                    itmRECLAMOS.SetValue("STAT1", pObjReclamo.Z_Reclamo.STAT1);
                    itmRECLAMOS.SetValue("USER1", pObjReclamo.Z_Reclamo.USER1);
                    itmRECLAMOS.SetValue("CMM1", pObjReclamo.Z_Reclamo.CMM1);
                    itmRECLAMOS.SetValue("STAT2", pObjReclamo.Z_Reclamo.STAT2);
                    itmRECLAMOS.SetValue("USER2", pObjReclamo.Z_Reclamo.USER2);
                    itmRECLAMOS.SetValue("CMM2", pObjReclamo.Z_Reclamo.CMM2);
                    itmRECLAMOS.SetValue("STAT3", pObjReclamo.Z_Reclamo.STAT3);
                    itmRECLAMOS.SetValue("USER3", pObjReclamo.Z_Reclamo.USER3);
                    itmRECLAMOS.SetValue("CMM3", pObjReclamo.Z_Reclamo.CMM3);
                    itmRECLAMOS.SetValue("VBELN", rec);
                    itmRECLAMOS.SetValue("FCHA1", ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA1));
                    itmRECLAMOS.SetValue("FCHA2", ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA2));
                    itmRECLAMOS.SetValue("FCHA3", ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA3));
                    //se adiciono el stat4 con código 9 - rhuapaya
                    itmRECLAMOS.SetValue("STAT4", pObjReclamo.Z_Reclamo.STAT4);
                    itmRECLAMOS.SetValue("USER4", pObjReclamo.Z_Reclamo.USER4);
                    itmRECLAMOS.SetValue("CMM4", pObjReclamo.Z_Reclamo.CMM4);
                    itmRECLAMOS.SetValue("FCHA4", ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA4));
                    //***************************************************************
                    itmRECLAMOS.SetValue("CPOSTAL", pObjReclamo.Z_Reclamo.CPOSTAL);
                    itmRECLAMOS.SetValue("DIRECCION", pObjReclamo.Z_Reclamo.DIRECCION);
                    itmRECLAMOS.SetValue("NIF", pObjReclamo.Z_Reclamo.NIF);
                    itmRECLAMOS.SetValue("PCONTACTO", pObjReclamo.Z_Reclamo.PCONTACTO);
                    itmRECLAMOS.SetValue("TELEFONO", pObjReclamo.Z_Reclamo.TELEFONO);

                    t_RECLAMOS.Append(itmRECLAMOS);
                }
                RfcStructureMetadata smVBPAVB = dest.Repository.GetStructureMetadata("VBPAVB");
                IRfcTable t_VBPAVB = smVBPAVB.CreateTable();
                //Interlocutor 
                foreach (InterlocutorReclamoBE i in pObjReclamo.Interlocutor)
                {

                    IRfcStructure itmVBPAVB = smVBPAVB.CreateStructure();
                    itmVBPAVB.SetValue("POSNR", i.POSNR);
                    itmVBPAVB.SetValue("PARVW", i.PARVW);
                    itmVBPAVB.SetValue("KUNNR", i.KUNNR);
                    itmVBPAVB.SetValue("PERNR", i.PERNR);
                    itmVBPAVB.SetValue("PARNR", i.PARNR);
                    itmVBPAVB.SetValue("ADRNR", i.ADRNR);
                    itmVBPAVB.SetValue("VBELN", rec);
                    itmVBPAVB.SetValue("UPDKZ", "U");
                    itmVBPAVB.SetValue("TELFX", i.Telefono);
                    itmVBPAVB.SetValue("ABLAD", i.Mail);
                    itmVBPAVB.SetValue("STCEG", i.NIF);

                    t_VBPAVB.Append(itmVBPAVB);
                }
                //verifico que el largo de los textos no sea mayor a 90 caracteres.
                ////int posSpace = 0;
                ////string texto = "";
                ////int contInicio = 0;
                ////foreach (TextoBE tb in pObjReclamo.Texto)
                ////{
                ////    posSpace = 0;
                ////    contInicio = 0;
                ////    texto = "";
                ////    posSpace = (tb.Descripcion.Length / 80);
                ////    if (posSpace * 80 <= tb.Descripcion.Length) { posSpace++; }
                ////    posSpace--;
                ////    if (tb.Descripcion.Length > 130)
                ////    {
                ////        for (int cont = 1; cont <= posSpace; cont++)
                ////        {
                ////            if (!tb.Descripcion.Substring(cont * 80, 1).Equals("\r\n") &&
                ////                !tb.Descripcion.Substring(cont * 79, 1).Equals("\r\n"))
                ////            {
                ////                tb.Descripcion = tb.Descripcion.Insert(cont * 80, "\r\n");
                ////            }

                ////        }

                ////    }
                ////}

                RfcStructureMetadata smTEXTOS_RECLAMO = dest.Repository.GetStructureMetadata("ZWEB_TEXTOS_RECLAMO");
                IRfcTable t_smTEXTOS_RECLAMO = smTEXTOS_RECLAMO.CreateTable();
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    int k = tb.Descripcion.Length;
                    tb.Descripcion = tb.Descripcion.Trim('|');
                    tb.Descripcion = tb.Descripcion.Replace(Environment.NewLine, "|") + "|";
                    if (tb.Descripcion.Length > 0)
                    {
                        if (tb.Descripcion.IndexOf("|", 0) > 0)
                        {
                            for (int i = 0, j = 0; tb.Descripcion.IndexOf("|", 0) >= 0; )
                            {
                                //ZWEB_TEXTOS_RECLAMO t = new ZWEB_TEXTOS_RECLAMO();                                
                                IRfcStructure itmsmTEXTOS_RECLAMO = smTEXTOS_RECLAMO.CreateStructure();
                                i = tb.Descripcion.IndexOf("|", j);
                                itmsmTEXTOS_RECLAMO.SetValue("FID", tb.CodTexto);
                                itmsmTEXTOS_RECLAMO.SetValue("TDLINE", tb.Descripcion.Substring(0, i));
                                tb.Descripcion = tb.Descripcion.Substring(i + 1);
                                t_smTEXTOS_RECLAMO.Append(itmsmTEXTOS_RECLAMO);
                                i++;
                            }
                        }
                    }
                }

                RfcStructureMetadata smReturn = dest.Repository.GetStructureMetadata("BAPIRET2");
                IRfcTable t_smReturn = smReturn.CreateTable();

                function = dest.Repository.CreateFunction("ZWEB_MODIFICA_RECLAMO");
                function.SetValue("T_FXVBKA", t_VBKAVB);
                function.SetValue("T_FXVBPA", t_VBPAVB);
                function.SetValue("T_FXVBUK", t_VBUKVB);
                function.SetValue("T_Z_RECLAMOS", t_RECLAMOS);
                function.SetValue("T_TEXTOS", t_smTEXTOS_RECLAMO);
                function.Invoke(dest);

                IRfcTable T_RETURN = function.GetTable("T_RETURN");

                if (T_RETURN.Count == 0)
                {
                    rpta.Codigo = "S";
                    rpta.Descripcion = "Reclamo " + pObjReclamo.Z_Reclamo.VBELN + " modificado.";
                }
                else
                {
                    foreach (IRfcStructure item in T_RETURN)
                    {
                        rpta.Codigo = item.GetString("TYPE");
                        rpta.Descripcion = item.GetString("MESSAGE");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                rpta = new GenericBE();
                rpta.Codigo = "E";
                rpta.Descripcion = "Error ABAP: " + e.Message;
            }
            finally {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public DECOR.BL.BE.DocReclamoBE getReclamoImpr(string pNroReclamo)
        {
            DocReclamoBE rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VER_RECLAMO");
                function.SetValue("P_VBELN", pNroReclamo.PadLeft(10, '0'));
                function.Invoke(dest);

                IRfcTable T_VBKA = function.GetTable("T_VBKA");
                rpta = new DocReclamoBE();
                //contactos
                foreach (IRfcStructure z in T_VBKA)
                {
                    rpta.Contactos.VBELN = z.GetString("VBELN");
                    rpta.Contactos.ERDAT = Convert.ToDateTime(z.GetString("ERDAT"));
                    rpta.Contactos.ERZET = z.GetString("ERZET").Substring(0, 2) + ":" + z.GetString("ERZET").Substring(2, 2) + ":" + z.GetString("ERZET").Substring(4, 2);
                    rpta.Contactos.ERNAM = z.GetString("ERNAM");
                    rpta.Contactos.AEDAT = Convert.ToDateTime(z.GetString("AEDAT"));
                    rpta.Contactos.AEZET = z.GetString("AEZET").Substring(0, 2) + ":" + z.GetString("AEZET").Substring(2, 2) + ":" + z.GetString("AEZET").Substring(4, 2);
                    rpta.Contactos.AENAM = z.GetString("AENAM");
                    rpta.Contactos.KTAAR = z.GetString("KTAAR");
                    rpta.Contactos.KTARA = z.GetString("KTARA");                    
                    rpta.Contactos.VBTYP = z.GetString("VBTYP");
                    rpta.Contactos.TRVOG = z.GetString("TRVOG");
                    rpta.Contactos.VKORG = z.GetString("VKORG");
                    rpta.Contactos.VTWEG = z.GetString("VTWEG");
                    rpta.Contactos.SPART = z.GetString("SPART");
                    rpta.Contactos.VKBUR = z.GetString("VKBUR");
                    rpta.Contactos.VKGRP = z.GetString("VKGRP");
                    rpta.Contactos.KTABG = Convert.ToDateTime(z.GetString("KTABG"));
                    rpta.Contactos.KTAEN = Convert.ToDateTime(z.GetString("KTAEN"));
                    rpta.Contactos.KTABT = z.GetString("KTABT").Substring(0, 2) + ":" + z.GetString("KTABT").Substring(2, 2) + ":" + z.GetString("KTABT").Substring(4, 2);
                    rpta.Contactos.KTAET = z.GetString("KTAET").Substring(0, 2) + ":" + z.GetString("KTAET").Substring(2, 2) + ":" + z.GetString("KTAET").Substring(4, 2);
                    rpta.Contactos.KTAGR = z.GetString("KTAGR");
                    rpta.Contactos.KTAST = z.GetString("KTAST");
                    rpta.Contactos.KTAER = z.GetString("KTAER");
                    rpta.Contactos.KTAFK = z.GetString("KTAFK");
                    rpta.Contactos.KTEXT = z.GetString("KTEXT");
                    rpta.Contactos.KUNNR = z.GetString("KUNNR").Trim('0');
                    rpta.Contactos.GBSTK = z.GetString("GBSTK");
                    rpta.Contactos.PARVW = z.GetString("PARVW");
                    rpta.Contactos.DIRECTION = z.GetString("DIRECTION");
                    rpta.Contactos.KTEXT_MC = z.GetString("KTEXT_MC");
                    rpta.Contactos.KTEXT_MC_LANGU = z.GetString("KTEXT_MC_LANGU");
                    rpta.Contactos.VGBEL = z.GetString("VGBEL").Trim('0');
                    rpta.Contactos.KTAEB = z.GetString("KTAEB");
                    break;
                }
                //Doc Comercial
                IRfcTable T_VBUK = function.GetTable("T_VBUK");
                foreach (IRfcStructure item in T_VBUK)
                {
                    rpta.DocComercial.GBSTK = item.GetString("GBSTK");
                    rpta.DocComercial.UVALL = item.GetString("UVALL");
                    rpta.DocComercial.VBTYP = item.GetString("VBTYP");
                    rpta.DocComercial.VBOBJ = item.GetString("VBOBJ");
                    rpta.DocComercial.VBELN = item.GetString("VBELN").Trim('0');
                    break;
                }
                //ZWEB_Reclamo
                List<GenericBE> lg = null;
                IRfcTable T_Z_RECLAMO = function.GetTable("T_Z_RECLAMO");
                foreach (IRfcStructure item in T_Z_RECLAMO)
                {
                    rpta.Z_Reclamo.MATNR = item.GetString("MATNR").Trim('0');
                    rpta.Z_Reclamo.MATNR2 = item.GetString("MATN2").Trim('0');
                    rpta.Z_Reclamo.RECLA = item.GetString("RECLA").Trim('0');
                    rpta.Z_Reclamo.STAT1 = item.GetString("STAT1");
                    rpta.Z_Reclamo.USER1 = item.GetString("USER1");
                    rpta.Z_Reclamo.CMM1 = item.GetString("CMM1");
                    rpta.Z_Reclamo.STAT2 = item.GetString("STAT2");
                    rpta.Z_Reclamo.USER2 = item.GetString("USER2");
                    rpta.Z_Reclamo.CMM2 = item.GetString("CMM2");
                    rpta.Z_Reclamo.STAT3 = item.GetString("STAT3");
                    rpta.Z_Reclamo.USER3 = item.GetString("USER3");
                    rpta.Z_Reclamo.CMM3 = item.GetString("CMM3");
                    rpta.Z_Reclamo.VBELN = item.GetString("VBELN").Trim('0');
                    rpta.Z_Reclamo.FCHA1 = Convert.ToDateTime(item.GetString("FCHA1"));
                    rpta.Z_Reclamo.FCHA2 = Convert.ToDateTime(item.GetString("FCHA2"));
                    rpta.Z_Reclamo.FCHA3 = Convert.ToDateTime(item.GetString("FCHA3"));
                    //se adicionó el estado 4 con codigo 9 -- rhuapaya
                    rpta.Z_Reclamo.STAT4 = item.GetString("STAT4");
                    rpta.Z_Reclamo.USER4 = item.GetString("USER4");
                    rpta.Z_Reclamo.CMM4 = item.GetString("CMM4");
                    rpta.Z_Reclamo.FCHA4 = Convert.ToDateTime(item.GetString("FCHA4"));
                    //****************************************************************************
                    rpta.Z_Reclamo.CPOSTAL = item.GetString("CPOSTAL");
                    rpta.Z_Reclamo.PCONTACTO = item.GetString("PCONTACTO");
                    rpta.Z_Reclamo.NIF = item.GetString("NIF");
                    rpta.Z_Reclamo.TELEFONO = item.GetString("TELEFONO");
                    rpta.Z_Reclamo.DIRECCION = item.GetString("DIRECCION");
                    break;
                }
                if ((T_Z_RECLAMO.Count > 0) && (T_VBKA.Count > 0))
                {
                    lg = getDatosImpr(rpta.Contactos.VGBEL, T_Z_RECLAMO[0].GetString("MATNR"), T_Z_RECLAMO[0].GetString("MATN2"), string.Empty);

                    if (lg.Find(x => x.Codigo.Equals("m1")) != null)
                        rpta.Z_Reclamo.NMATNR = lg.Find(x => x.Codigo.Equals("m1")).Descripcion;

                    if (lg.Find(x => x.Codigo.Equals("m2")) != null)
                        rpta.Z_Reclamo.NMATNR2 = lg.Find(x => x.Codigo.Equals("m2")).Descripcion;

                    if (lg.Find(x => x.Codigo.Equals("p")) != null)
                        rpta.Contactos.KTAEN = ParametroDALC.dateSapToNet(lg.Find(x => x.Codigo.Equals("p")).Descripcion);
                }
                //Interlocutor
                string ap = string.Empty;
                string ag = string.Empty;
                bool es = false;
                IRfcTable T_VBPA = function.GetTable("T_VBPA");

                foreach (IRfcStructure i in T_VBPA)
                {
                    if (i.GetString("PARVW").Equals("AG") && !i.GetString("PARVW").Equals(""))
                    {
                        es = ReclamoDALC.Instance(this._connId).getInterXEmpresa(i.GetString("KUNNR"), string.Empty, string.Empty, string.Empty, string.Empty, string.Empty).Find(x => x.PARVW.Equals("AG")).EsVentual;
                        if (es)
                            ag = i.GetString("ADRNR");
                        else
                            ag = i.GetString("KUNNR");
                    }
                    else if (i.GetString("PARVW").Equals("AP") && !i.GetString("PARVW").Equals(""))
                    {
                        ap = i.GetString("PARNR");
                    }   
                }
                List<InterlocutorReclamoBE> lst = null;
                if (es)
                {
                    lst = ReclamoDALC.Instance(this._connId).getInterXEmpresa(ag, string.Empty, string.Empty, string.Empty, string.Empty, "X");
                }
                else
                {
                    lst = ReclamoDALC.Instance(this._connId).getInterXEmpresa(ag, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);
                }
                
                foreach (IRfcStructure i in T_VBPA)
                {
                    InterlocutorReclamoBE it = new InterlocutorReclamoBE();
                    InterlocutorReclamoBE inter = null;
                    it.POSNR = i.GetString("POSNR");
                    it.PARVW = i.GetString("PARVW");
                    it.KUNNR = i.GetString("KUNNR");
                    it.PERNR = i.GetString("PERNR");
                    it.PARNR = i.GetString("PARNR");
                    it.ADRNR = i.GetString("ADRNR");
                    it.VBELN = i.GetString("VBELN");
                    if (i.GetString("PARVW").Equals("ZM"))
                        it.Cargo = i.GetString("ABLAD").Equals("") ? (i.GetString("KNREF").Equals("") ? "" : i.GetString("KNREF")) : i.GetString("ABLAD");
                    else if (i.GetString("PARVW").Equals("AG"))
                        it.Mail = i.GetString("ABLAD");
                    //otros datos impr
                    inter = lst.Find(x => x.PARVW.Equals(i.GetString("PARVW")));
                    if (inter != null)
                    {
                        it.Telefono = inter.Telefono == null ? "" : inter.Telefono;
                        it.Direccion = inter.Direccion == null ? "" : inter.Direccion;
                        it.NOMBRE = inter.NOMBRE == null ? "" : inter.NOMBRE;
                        it.NIF = i.GetString("STCEG");
                    }
                    rpta.Interlocutor.Add(it);
                }

                IRfcTable T_TEXTOS = function.GetTable("T_TEXTOS");
                foreach (IRfcStructure tb in T_TEXTOS)
                {
                    TextoBE t = new TextoBE();
                    //string texto = string.Empty;
                    //string puntoAparte = "." + Environment.NewLine;
                    if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID"))) != null)
                    {
                        t = rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID")));
                    }
                    else
                    {
                        t.CodTexto = tb.GetString("FID");
                    }
                    if (!tb.GetString("TDLINE").Equals(""))
                    {
                        t.Descripcion += tb.GetString("TDLINE"); //"\r\n" + " "
                        t.Descripcion = t.Descripcion.Trim();
                        if (tb.GetString("TDLINE").Length < 79 && t.Descripcion.IndexOf(".", t.Descripcion.Length - 1) != -1)
                        {
                            t.Descripcion = t.Descripcion + Environment.NewLine;
                        }
                        if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.GetString("FID"))) == null)
                        {
                            rpta.Texto.Add(t);
                        }
                    }
                }
                //IRfcTable T_VISITAS = function.GetTable("T_VISITAS");
                //foreach (IRfcStructure item in T_VISITAS)
                //{
                //    ZReclamoVisitasBE vi = new ZReclamoVisitasBE();
                //    vi.MANDT = item.GetString("Mandt");
                //    vi.VBELN = item.GetString("Vbeln");
                //    vi.KTAST = item.GetString("Ktast");
                //    vi.NROVIS = item.GetString("Nrovis");
                //    vi.FECHA = Convert.ToDateTime(item.GetString("Fecha"));
                //    vi.TIME = item.GetString("Hora").Substring(0, 2) + ":" + item.GetString("Hora").Substring(2, 2);
                //    vi.RESP = item.GetString("Resp");
                //    vi.COMENT = item.GetString("Coment");

                //    rpta.Z_ReclamoVisita.Add(vi);
                //}
                CombosReclamoBE mot = getCombosReclamo();
                GenericBE gen = mot.T_MOTIVO.Find(x => x.Codigo.Equals(rpta.Contactos.KTAGR));
                if (gen != null)
                {
                    rpta.Contactos.KTAGR = gen.Descripcion;
                }
            }
            catch (Exception ex)
            {
                rpta = null;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return rpta;
        }

        public List<DECOR.BL.BE.ZReclamoVisitasBE> setVisitas(List<DECOR.BL.BE.ZReclamoVisitasBE> lstVisitas)
        {
            List<ZReclamoVisitasBE> lst = new List<ZReclamoVisitasBE>();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata smVISITAS = dest.Repository.GetStructureMetadata("ZWEB_VISITAS");
                IRfcTable t_VISITAS = smVISITAS.CreateTable();
                foreach (ZReclamoVisitasBE item in lstVisitas)
                {
                    IRfcStructure itmVISITAS = smVISITAS.CreateStructure();
                    itmVISITAS.SetValue("NROVIS", item.NROVIS.PadLeft(10, '0'));
                    itmVISITAS.SetValue("VBELN", item.VBELN);
                    itmVISITAS.SetValue("KTAST", item.KTAST);
                    itmVISITAS.SetValue("FECHA", ParametroDALC.dateNetToSap(item.FECHA));
                    itmVISITAS.SetValue("HORA", item.TIME);
                    itmVISITAS.SetValue("RESP", item.RESP);
                    itmVISITAS.SetValue("COMENT", item.COMENT);

                    t_VISITAS.Append(itmVISITAS);
                }

                function = dest.Repository.CreateFunction("ZWEB_GUARDAR_VISITAS");
                function.SetValue("T_VISITAS", t_VISITAS);
                function.Invoke(dest);

                IRfcTable T_VISITAS = function.GetTable("T_VISITAS");
                foreach (IRfcStructure item in T_VISITAS)
                {
                    ZReclamoVisitasBE objVisitas = new ZReclamoVisitasBE();
                    objVisitas.NROVIS = item.GetString("NROVIS");
                    objVisitas.VBELN = item.GetString("VBELN");
                    objVisitas.KTAST = item.GetString("KTAST");
                    objVisitas.FECHA = ParametroDALC.dateSapToNet(item.GetString("FECHA"));
                    objVisitas.TIME = item.GetString("HORA").Substring(0, 2) + ":" + item.GetString("HORA").Substring(2, 2);
                    objVisitas.RESP = item.GetString("RESP");
                    objVisitas.COMENT = item.GetString("COMENT");

                    lst.Add(objVisitas);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }

            return lst;
        }

        #endregion

        public List<GenericBE> getDatosImpr(string pPedido, string pMat1, string pMat2, string pRef)
        {
            List<GenericBE> rpta = null;
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VALIDA_DATOS_RECLAMO");
                function.SetValue("P_MATNR1", pMat1.PadLeft(18, '0'));
                function.SetValue("P_MATNR2", pMat2.PadLeft(18, '0'));
                function.SetValue("P_REC_REF", pRef);
                function.SetValue("P_PEDIDO", pPedido.PadLeft(10, '0'));
                function.Invoke(dest);

                IRfcTable T_RETURN = function.GetTable("T_RETURN");
                rpta = new List<GenericBE>();
                foreach (IRfcStructure r in T_RETURN)
                {
                    GenericBE g = new GenericBE();
                    g.Descripcion = "Invalido";
                    g.Codigo = r.GetString("TYPE");
                    if (r.GetString("TYPE").Equals("p") && !r.GetString("MESSAGE").Equals(""))
                    {
                        g.Descripcion = r.GetString("MESSAGE");
                    }
                    else if (r.GetString("TYPE").Equals("1") && !r.GetString("MESSAGE").Equals(""))
                    {
                        g.Codigo = "m" + r.GetString("TYPE");
                        g.Descripcion = r.GetString("MESSAGE");
                    }
                    else if (r.GetString("TYPE").Equals("2") && !r.GetString("MESSAGE").Equals(""))
                    {
                        g.Codigo = "m" + r.GetString("TYPE");
                        g.Descripcion = r.GetString("MESSAGE");
                    }
                    rpta.Add(g);
                }
            }
            catch (Exception e)
            {
                rpta = null;
            }
            finally {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            
            return rpta;
        }
    }
}
